Sorting এবং Searching Functions (সর্টিং এবং সার্চিং ফাংশনস)

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference)
275
275

Sorting এবং Searching Functions (সর্টিং এবং সার্চিং ফাংশনস)

সি প্রোগ্রামিং ভাষায় সর্টিং এবং সার্চিং ফাংশনগুলো ডেটা অর্গানাইজ এবং অনুসন্ধান করতে ব্যবহৃত হয়। এই ফাংশনগুলো মূলত stdlib.h হেডার ফাইলের অন্তর্গত এবং প্রোগ্রামের ডেটা ম্যানেজমেন্টে বিশেষভাবে কার্যকর। qsort() এবং bsearch() ফাংশন সর্টিং এবং সার্চিংয়ের জন্য সবচেয়ে বেশি ব্যবহৃত হয়।

নিচে সি প্রোগ্রামে সর্টিং এবং সার্চিং ফাংশনগুলো এবং তাদের কাজ সম্পর্কে বিস্তারিত আলোচনা করা হলো।


১. qsort() – কুইকসোর্ট অ্যালগরিদমের মাধ্যমে সর্টিং

qsort() ফাংশনটি কুইকসোর্ট অ্যালগরিদম ব্যবহার করে একটি অ্যারে সর্ট করতে ব্যবহৃত হয়। এটি একটি জেনেরিক ফাংশন যা যে কোনো ধরনের ডেটা অ্যারে সর্ট করতে সক্ষম। qsort() ফাংশন সর্টিং প্রক্রিয়ায় কম্পারেটর ফাংশন ব্যবহার করে, যা অ্যারের এলিমেন্টগুলোকে তুলনা করে সর্টিং সম্পন্ন করে।

সিঙ্কট্যাক্স:

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *));
  • base: সর্ট করা অ্যারের প্রথম এলিমেন্টের পয়েন্টার।
  • nitems: অ্যারের মোট এলিমেন্ট সংখ্যা।
  • size: প্রতিটি এলিমেন্টের আকার (বাইটে)।
  • compar: কম্পারেটর ফাংশন যা এলিমেন্টের তুলনা নির্ধারণ করে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

// কম্পারেটর ফাংশন
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int arr[] = {5, 3, 8, 6, 2};
    int n = sizeof(arr) / sizeof(arr[0]);

    // অ্যারে সর্ট করা
    qsort(arr, n, sizeof(int), compare);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

Output:
Sorted array: 2 3 5 6 8

Note: compare() ফাংশনটি কম্পারেটর ফাংশন হিসেবে ব্যবহৃত হয়, যা qsort() কে বলে দেয় কীভাবে এলিমেন্ট তুলনা করে সর্ট করতে হবে।


২. bsearch() – বাইনারি সার্চ

bsearch() ফাংশনটি একটি সর্ট করা অ্যারেতে নির্দিষ্ট এলিমেন্ট খুঁজে বের করতে ব্যবহৃত হয়। এটি বাইনারি সার্চ অ্যালগরিদম ব্যবহার করে দ্রুত সার্চ সম্পন্ন করে। bsearch() ফাংশন ব্যবহার করতে হলে অ্যারেটি পূর্বেই সর্ট করা থাকা প্রয়োজন।

সিঙ্কট্যাক্স:

void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *));
  • key: যে মানটি খোঁজা হচ্ছে।
  • base: অ্যারের প্রথম এলিমেন্টের পয়েন্টার।
  • nitems: অ্যারের মোট এলিমেন্ট সংখ্যা।
  • size: প্রতিটি এলিমেন্টের আকার (বাইটে)।
  • compar: কম্পারেটর ফাংশন যা এলিমেন্টের তুলনা নির্ধারণ করে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

// কম্পারেটর ফাংশন
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int key = 3;

    // বাইনারি সার্চ
    int *found = (int *)bsearch(&key, arr, n, sizeof(int), compare);

    if (found != NULL) {
        printf("Element %d found at position %ld\n", key, found - arr);
    } else {
        printf("Element not found.\n");
    }

    return 0;
}

Output:
Element 3 found at position 2

Note: compare() ফাংশনটি bsearch() ফাংশনের জন্য কম্পারেটর হিসেবে কাজ করে।


সর্টিং এবং সার্চিং ফাংশনের সংক্ষিপ্তসার

ফাংশনকাজ
qsort()কুইকসোর্ট অ্যালগরিদম ব্যবহার করে সর্টিং করে
bsearch()বাইনারি সার্চ ব্যবহার করে নির্দিষ্ট মান খুঁজে বের করে

কম্পারেটর ফাংশন

qsort() এবং bsearch() ফাংশনগুলো সর্টিং এবং সার্চিংয়ের জন্য একটি কম্পারেটর ফাংশন ব্যবহার করে। কম্পারেটর ফাংশনটি দুটি পয়েন্টার আর্গুমেন্ট গ্রহণ করে এবং তাদের তুলনা করে একটি মান রিটার্ন করে। এই মান নির্ধারণ করে যে একটি এলিমেন্ট অন্যটির তুলনায় বড়, ছোট বা সমান কিনা।

  • যদি a < b হয়, তাহলে কম্পারেটর ফাংশন একটি নেগেটিভ মান রিটার্ন করে।
  • যদি a == b হয়, তাহলে কম্পারেটর ফাংশন শূন্য (0) রিটার্ন করে।
  • যদি a > b হয়, তাহলে কম্পারেটর ফাংশন একটি পজিটিভ মান রিটার্ন করে।

কম্পারেটর ফাংশনের উদাহরণ:

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

এই কম্পারেটর ফাংশনটি qsort() এবং bsearch() ফাংশনের জন্য ব্যবহার করা যায়।


সারসংক্ষেপ

সি প্রোগ্রামিং ভাষায় qsort() এবং bsearch() ফাংশন দুটি সর্টিং এবং সার্চিংয়ের জন্য খুবই কার্যকর। qsort() ফাংশনটি কুইকসোর্ট অ্যালগরিদম ব্যবহার করে অ্যারে সর্ট করতে এবং bsearch() ফাংশনটি সর্ট করা অ্যারেতে নির্দিষ্ট মান খুঁজে বের করতে ব্যবহৃত হয়। এই ফাংশনগুলোতে কম্পারেটর ফাংশন ব্যবহার করে কাস্টম সর্টিং এবং সার্চিং সম্ভব।

common.content_added_by

stdlib.h এর সর্টিং এবং সার্চিং ফাংশনস

206
206

stdlib.h এর সোর্টিং এবং সার্চিং ফাংশনসমূহ

stdlib.h হেডার ফাইলটিতে সোর্টিং (Sorting) এবং সার্চিং (Searching) অপারেশন সম্পাদনের জন্য দুটি গুরুত্বপূর্ণ ফাংশন রয়েছে: qsort() এবং **bsearch()**। এই ফাংশনগুলো দ্রুত এবং কার্যকরীভাবে এরে বা ডেটা সংগ্রহের উপর কাজ করে, যা প্রোগ্রামের কার্যকারিতা উন্নত করতে সহায়ক।


১. qsort() – কুইক সোর্ট ফাংশন

qsort() ফাংশনটি একটি এরে বা ডেটা এলিমেন্টকে কুইক সোর্ট (Quick Sort) পদ্ধতিতে সজ্জিত বা সঠিকভাবে সাজানোর জন্য ব্যবহৃত হয়। এটি যে কোন ধরনের ডেটা টাইপের উপর কাজ করতে সক্ষম এবং এটি কাস্টম কম্পারেটর ফাংশন ব্যবহার করে এরে সাজাতে পারে।

সিঙ্কট্যাক্স

void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
  • base: এরের প্রথম এলিমেন্টের পয়েন্টার।
  • num: এরের মোট এলিমেন্ট সংখ্যা।
  • size: প্রতিটি এলিমেন্টের সাইজ (বাইটে)।
  • compar: কম্পারেটর ফাংশনের পয়েন্টার, যা দুটি এলিমেন্ট তুলনা করতে ব্যবহৃত হয়।

উদাহরণ

নিচের উদাহরণে qsort() ফাংশন ব্যবহার করে ইন্টিজার এরে সাজানো হয়েছে।

#include <stdio.h>
#include <stdlib.h>

// কম্পারেটর ফাংশন: ছোট থেকে বড় ক্রমে সাজানোর জন্য
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int arr[] = {5, 2, 8, 1, 4};
    int n = sizeof(arr) / sizeof(arr[0]);

    // `qsort()` ফাংশন ব্যবহার করে সজ্জিত করা
    qsort(arr, n, sizeof(int), compare);

    // সজ্জিত এরে প্রদর্শন
    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

উপরের উদাহরণে compare() ফাংশনটি দুটি সংখ্যাকে তুলনা করে এবং ছোট থেকে বড় ক্রমে এরে সাজায়। qsort() ফাংশনটি একটি জেনেরিক ফাংশন, যা যেকোনো ডেটা টাইপের উপর কাজ করতে সক্ষম, যদি সঠিকভাবে কম্পারেটর ফাংশন সরবরাহ করা হয়।


২. bsearch() – বাইনারি সার্চ ফাংশন

bsearch() ফাংশনটি একটি সজ্জিত (sorted) এরে থেকে একটি নির্দিষ্ট এলিমেন্ট খুঁজে বের করতে ব্যবহৃত হয়। এটি বাইনারি সার্চ অ্যালগরিদম ব্যবহার করে কাজ করে, যা দ্রুততম সার্চিং অপারেশনগুলির মধ্যে অন্যতম। এই ফাংশনটি প্রোগ্রামের কার্যকারিতা উন্নত করে, তবে এটি শুধুমাত্র সজ্জিত (sorted) এরে-এর উপর কাজ করে।

সিঙ্কট্যাক্স

void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
  • key: খোঁজা এলিমেন্টের পয়েন্টার।
  • base: এরে-এর প্রথম এলিমেন্টের পয়েন্টার।
  • num: এরে-এর মোট এলিমেন্ট সংখ্যা।
  • size: প্রতিটি এলিমেন্টের সাইজ (বাইটে)।
  • compar: কম্পারেটর ফাংশনের পয়েন্টার, যা key এবং এরে এলিমেন্ট তুলনা করতে ব্যবহৃত হয়।

উদাহরণ

নিচের উদাহরণে bsearch() ফাংশন ব্যবহার করে একটি সজ্জিত ইন্টিজার এরে থেকে নির্দিষ্ট একটি সংখ্যা খোঁজা হয়েছে।

#include <stdio.h>
#include <stdlib.h>

// কম্পারেটর ফাংশন: ছোট থেকে বড় ক্রমে তুলনা করার জন্য
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int arr[] = {1, 2, 4, 5, 8};
    int n = sizeof(arr) / sizeof(arr[0]);
    int key = 4;

    // `bsearch()` ফাংশন ব্যবহার করে এলিমেন্ট খোঁজা
    int *item = (int *)bsearch(&key, arr, n, sizeof(int), compare);

    if (item != NULL) {
        printf("Element found: %d\n", *item);
    } else {
        printf("Element not found\n");
    }
    return 0;
}

উপরের উদাহরণে, bsearch() ফাংশনটি key হিসেবে 4 এর মান খোঁজে এবং যদি তা এরে-এ উপস্থিত থাকে, তাহলে এটি তার পয়েন্টার রিটার্ন করে। যদি এরে-এ key উপস্থিত না থাকে, তাহলে এটি NULL রিটার্ন করে।


সারসংক্ষেপ

ফাংশনকাজপ্রয়োজন
qsort()এরে বা ডেটা সজ্জিত করে (Quick Sort)সজ্জিত ডেটা প্রয়োজন
bsearch()সজ্জিত ডেটা থেকে নির্দিষ্ট এলিমেন্ট খোঁজে (Binary Search)সজ্জিত ডেটা

এই ফাংশনগুলো ব্যবহার করে সি প্রোগ্রামিংয়ে ডেটা সজ্জিত ও খোঁজার কাজ দ্রুত এবং সহজে সম্পন্ন করা যায়।

common.content_added_by

qsort() এর মাধ্যমে Array Sorting

207
207

qsort() এর মাধ্যমে Array Sorting

সি প্রোগ্রামিং ভাষায় qsort() ফাংশনটি একটি অ্যারে সॉर्ट করার জন্য ব্যবহৃত হয়। এটি stdlib.h হেডার ফাইলে সংজ্ঞায়িত এবং একটি সাধারণ এবং কার্যকরী সোরটিং এলগরিদম (Quicksort) ব্যবহার করে। qsort() ফাংশনটি খুব দ্রুত অ্যারে সোর্স করতে পারে এবং এটি কোনও নির্দিষ্ট সিএলএল-ভিত্তিক ফাংশন ব্যবহার করে কাস্টম সোরটিং করতে দেয়।

এখানে qsort() ফাংশনটি কীভাবে কাজ করে এবং কিভাবে এটি অ্যারে সোর্ট করতে ব্যবহৃত হয় তা বিস্তারিতভাবে আলোচনা করা হলো।


qsort() সিঙ্কট্যাক্স

void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
  • base: অ্যারের পয়েন্টার (অথবা যে মেমোরি ব্লকটি সেভ করা হয়েছে)।
  • num: অ্যারে বা মেমোরির এলিমেন্টের সংখ্যা।
  • size: প্রতিটি এলিমেন্টের আকার (বাইটে)।
  • compar: একটি কাস্টম কম্প্যারিজন ফাংশন, যা দুটি এলিমেন্টের তুলনা করে সেগুলির ক্রম নির্ধারণ করে।

কম্প্যারিজন ফাংশন

qsort() ফাংশনটি কাস্টম কম্প্যারিজন ফাংশন ব্যবহার করে এলিমেন্টগুলি তুলনা করে। এই ফাংশনটি দুটি পয়েন্টার প্যারামিটার নেয়, এবং একটি ইতিবাচক, নেগেটিভ বা শূন্য মান রিটার্ন করে যা এলিমেন্টগুলির তুলনা নির্ধারণ করে:

  • একটি নেতিবাচক মান (যেমন -1): প্রথম পয়েন্টারটি দ্বিতীয়টির আগে থাকবে।
  • শূন্য মান (0): দুটি এলিমেন্ট সমান।
  • একটি ইতিবাচক মান (যেমন 1): দ্বিতীয় পয়েন্টারটি প্রথমটির আগে থাকবে।

এটি কিভাবে কাজ করে

  1. qsort() ফাংশনটি অ্যারে বা মেমোরি ব্লকটি নেয় এবং compar() ফাংশনটি ব্যবহার করে এলিমেন্টগুলির তুলনা করে।
  2. compar() ফাংশনটি একটি কাস্টম নিয়মে এলিমেন্টগুলি তুলনা করে এবং তাদের অবস্থান ঠিক করে।

qsort() এর উদাহরণ

নীচে একটি উদাহরণ দেয়া হলো যেখানে qsort() ব্যবহার করে একটি ইন্টিজার অ্যারে সোর্ট করা হয়েছে:

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

// কাস্টম কম্প্যারিজন ফাংশন
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);  // ASCENDING অর্ডারে সোর্টিং
}

int main() {
    int arr[] = {12, 45, 23, 4, 90, 56, 78, 67};
    size_t n = sizeof(arr) / sizeof(arr[0]);

    // অ্যারে সোর্ট করা
    qsort(arr, n, sizeof(int), compare);

    // সোর্ট করা অ্যারে প্রিন্ট করা
    printf("Sorted array: ");
    for (size_t i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

আউটপুট:

Sorted array: 4 12 23 45 56 67 78 90

এখানে, qsort() ফাংশনটি arr অ্যারেটি সোর্ট করেছে এবং compare() ফাংশনটি সোরটিংয়ের জন্য ব্যবহৃত হয়েছে। compare() ফাংশনটি দুটি ইন্টিজারের পার্থক্য বের করে সেগুলিকে ASCENDING অর্ডারে সাজিয়ে দেয়।


কম্প্যারিজন ফাংশন এর উদাহরণ

১. ডিসেন্ডিং অর্ডারে সোরটিং

যদি আমরা চান যে অ্যারে ডিসেন্ডিং অর্ডারে সোর্ট হোক, তবে compare() ফাংশনটিকে একটু পরিবর্তন করতে হবে:

int compare_desc(const void *a, const void *b) {
    return (*(int *)b - *(int *)a);  // DESCENDING অর্ডারে সোর্টিং
}

এবং qsort() ফাংশনে compare_desc() ফাংশনটি ব্যবহার করুন।

২. স্ট্রিং সোরটিং

qsort() ফাংশনটি স্ট্রিংও সোর্ট করতে পারে। নিচে একটি স্ট্রিং অ্যারে সোর্ট করার উদাহরণ দেওয়া হলো:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare_strings(const void *a, const void *b) {
    return strcmp(*(const char **)a, *(const char **)b);  // স্ট্রিং তুলনা
}

int main() {
    const char *arr[] = {"Banana", "Apple", "Orange", "Mango", "Grapes"};
    size_t n = sizeof(arr) / sizeof(arr[0]);

    // স্ট্রিং অ্যারে সোর্ট করা
    qsort(arr, n, sizeof(char *), compare_strings);

    // সোর্ট করা স্ট্রিং অ্যারে প্রিন্ট করা
    printf("Sorted array of strings: ");
    for (size_t i = 0; i < n; i++) {
        printf("%s ", arr[i]);
    }
    printf("\n");

    return 0;
}

আউটপুট:

Sorted array of strings: Apple Banana Grapes Mango Orange

এখানে compare_strings() ফাংশনটি strcmp() ব্যবহার করে স্ট্রিংগুলি তুলনা করে এবং সেগুলিকে ASCENDING অর্ডারে সজ্জিত করে।


সারসংক্ষেপ

qsort() ফাংশনটি একটি সাধারণ এবং শক্তিশালী ফাংশন যা অ্যারে বা মেমোরির এলিমেন্টগুলি সোরট করতে ব্যবহৃত হয়। এটি একটি কাস্টম কম্প্যারিজন ফাংশন ব্যবহার করে এলিমেন্টগুলির তুলনা করে এবং বিভিন্ন ধরণের ডেটা টাইপ (যেমন ইন্টিজার, স্ট্রিং, বা কাস্টম স্ট্রাকচার) সুরক্ষিতভাবে সোর্ট করতে পারে।

ফাংশনকাজসিঙ্কট্যাক্স
qsort()অ্যারে বা মেমোরি ব্লক সোরট করাvoid qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
compare()কাস্টম কম্প্যারিজন ফাংশনint compare(const void *a, const void *b);

এটি খুবই উপকারী যখন আপনার প্রোগ্রামে ডেটা সোরট করতে হয় এবং আপনি কাস্টম তুলনা লজিক প্রয়োগ করতে চান।

common.content_added_by
206
206

bsearch() এর মাধ্যমে Binary Search

সি প্রোগ্রামিং ভাষায় bsearch() ফাংশনটি একটি বিল্ট-ইন ফাংশন যা বাইনারি সার্চ (Binary Search) এলগরিদমের মাধ্যমে সॉর্ট করা অ্যারের মধ্যে একটি উপাদান খুঁজে বের করার জন্য ব্যবহৃত হয়। bsearch() ফাংশনটি stdlib.h হেডার ফাইলে ডিফাইন করা থাকে এবং এটি একত্রিতভাবে একটি স.sorted অ্যারে এবং একটি উপাদান অনুসন্ধান করতে সহায়ক।

বাইনারি সার্চ (Binary Search)

বাইনারি সার্চ একটি দ্রুত অনুসন্ধান পদ্ধতি যা সিলেক্ট করা তালিকায় উপাদান খুঁজে পেতে O(log n) সময়ে কাজ করে। এই পদ্ধতিতে, প্রথমে তালিকাটির মাঝের উপাদান পরীক্ষা করা হয়। তারপর, তালিকাটি দুটি ভাগে ভাগ করা হয় (যেমন, যদি কাঙ্ক্ষিত উপাদান ছোট হয়, তাহলে তালিকার বাম অংশে খোঁজা হয়, আর যদি বড় হয়, তাহলে ডান অংশে খোঁজা হয়) এবং এই প্রক্রিয়া পুনরাবৃত্তি করা হয় যতক্ষণ না উপাদানটি পাওয়া যায় বা তালিকার শেষ না হয়।

bsearch() ফাংশনের সিঙ্কট্যাক্স:

void *bsearch(const void *key, const void *base, size_t n_items, size_t size, int (*compar)(const void *, const void *));

আর্গুমেন্ট:

  • key: এটি অনুসন্ধানযোগ্য উপাদান যা আপনি খুঁজছেন।
  • base: এটি সসর্ড করা অ্যারের সূচক (pointer)।
  • n_items: অ্যারে এর মধ্যে উপাদানের সংখ্যা।
  • size: প্রতিটি উপাদানের আকার (বাইটে)।
  • compar: একটি কাস্টম কম্প্যারিজন ফাংশন যা দুটি উপাদান তুলনা করতে ব্যবহৃত হয়।

রিটার্ন ভ্যালু:

  • যদি উপাদানটি পাওয়া যায়, তবে bsearch() ফাংশনটি একটি পয়েন্টার রিটার্ন করবে যা সেই উপাদানের অবস্থান নির্দেশ করে।
  • যদি উপাদানটি পাওয়া না যায়, তবে এটি NULL রিটার্ন করবে।

উদাহরণ: bsearch() ব্যবহার করে Binary Search

এখানে একটি উদাহরণ দেওয়া হলো, যেখানে bsearch() ফাংশন ব্যবহার করে একটি সসর্ড অ্যারের মধ্যে একটি উপাদান খোঁজা হয়েছে।

#include <stdio.h>
#include <stdlib.h>

// তুলনা ফাংশন যা bsearch() এর জন্য প্রয়োজন
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);  // দুটি ইন্টিজার তুলনা
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
    int n = sizeof(arr) / sizeof(arr[0]);
    int key = 7;
    
    // bsearch() ফাংশন ব্যবহার করে উপাদান খোঁজা
    int *result = (int *)bsearch(&key, arr, n, sizeof(int), compare);

    if (result != NULL) {
        printf("Element found: %d\n", *result);  // উপাদান পাওয়া গেলে তার মান প্রদর্শন
    } else {
        printf("Element not found\n");  // উপাদান না পাওয়া গেলে
    }

    return 0;
}

ব্যাখ্যা:

  1. arr[]: এটি সসর্ড করা অ্যারে যার মধ্যে 10টি উপাদান রয়েছে।
  2. compare(): এটি একটি তুলনা ফাংশন যা দুটি উপাদানকে তুলনা করে। এটি bsearch() ফাংশনের জন্য প্রয়োজন, কারণ bsearch() সসর্ড করা অ্যারের মধ্যে একটি উপাদান খোঁজে এবং এটি জানাতে পারে যে কোন উপাদান ছোট, বড়, বা সমান।
  3. bsearch(): এটি key (যা খুঁজে বের করতে হবে) এবং arr (সসর্ড করা অ্যারে) এর মধ্যে n (উপাদানের সংখ্যা) এবং sizeof(int) (প্রতিটি উপাদানের আকার) পাস করা হয়।
  4. ফলস্বরূপ, যদি key অ্যারেতে পাওয়া যায়, তবে bsearch() তার অবস্থান নির্দেশকারী পয়েন্টার রিটার্ন করবে। অন্যথায়, এটি NULL রিটার্ন করবে।

আউটপুট:

Element found: 7

যেহেতু 7 অ্যারেতে আছে, তাই এটি সেই উপাদানটি রিটার্ন করবে।


সারসংক্ষেপ:

  • bsearch() ফাংশনটি বাইনারি সার্চ পদ্ধতিতে একটি সসর্ড অ্যারে থেকে একটি উপাদান খুঁজে বের করার জন্য ব্যবহৃত হয়।
  • এটি key (যে উপাদানটি খুঁজে বের করতে চান) এবং base (সসর্ড অ্যারে) সহ আরো কিছু আর্গুমেন্ট গ্রহণ করে।
  • বাইনারি সার্চ একটি খুব কার্যকরী পদ্ধতি যখন অ্যারে সসর্ড থাকে, কারণ এটি O(log n) সময়ে কাজ করে।
  • compare() ফাংশনটি bsearch() ফাংশনের জন্য প্রয়োজন, যা দুটি উপাদান তুলনা করতে ব্যবহৃত হয়।

bsearch() একটি শক্তিশালী এবং দক্ষ উপায় অ্যারের মধ্যে ত্রুটিমুক্তভাবে উপাদান খুঁজে বের করার জন্য।

common.content_added_by

Custom Sorting এবং Searching Techniques

233
233

Custom Sorting এবং Searching Techniques (কাস্টম সর্টিং এবং সার্চিং টেকনিক্স)

সি প্রোগ্রামিংয়ে কাস্টম সর্টিং এবং কাস্টম সার্চিং টেকনিক্স ব্যবহার করে আপনি নির্দিষ্ট শর্ত অনুযায়ী ডেটা সর্ট এবং সার্চ করতে পারেন। সাধারণ সর্টিং এবং সার্চিং ফাংশন যেমন qsort() এবং bsearch() ব্যবহার করা হলেও, কখনও কখনও আপনার নির্দিষ্ট কাস্টম শর্তে ডেটা সর্ট বা সার্চ করতে হতে পারে। সেক্ষেত্রে, কাস্টম কম্পারেটর ফাংশন এবং কাস্টম সার্চ পদ্ধতি ব্যবহার করতে পারেন।

নিচে কাস্টম সর্টিং এবং সার্চিং টেকনিক্সের বিস্তারিত আলোচনা করা হলো।


কাস্টম সর্টিং টেকনিক্স

১. কাস্টম কম্পারেটর ফাংশন ব্যবহার করে সর্টিং

সি ভাষায় qsort() ফাংশনটি জেনেরিক সর্টিং ফাংশন যা কাস্টম কম্পারেটর ফাংশন ব্যবহার করে কোনো অ্যারের এলিমেন্টকে সর্ট করতে সহায়ক। আপনি যখন নির্দিষ্ট কোনো শর্তে সর্ট করতে চান, তখন একটি কাস্টম কম্পারেটর ফাংশন তৈরি করতে পারেন।

উদাহরণ: কাস্টম সংখ্যা সর্টিং

ধরা যাক, আমরা একটি অ্যারে সর্ট করতে চাই, তবে সর্টিংটি হবে উল্টোভাবে অর্থাৎ বড় সংখ্যাগুলি আগে আসবে (ডিসেনডিং অর্ডার)।

সিঙ্কট্যাক্স:

int compare(const void *a, const void *b);

উদাহরণ কোড:

#include <stdio.h>
#include <stdlib.h>

// কাস্টম কম্পারেটর ফাংশন
int compare(const void *a, const void *b) {
    return (*(int *)b - *(int *)a);  // Descending order (বড় থেকে ছোট)
}

int main() {
    int arr[] = {12, 5, 3, 8, 1};
    int n = sizeof(arr) / sizeof(arr[0]);

    // qsort ব্যবহার করে সর্ট করা
    qsort(arr, n, sizeof(int), compare);

    printf("Sorted array in descending order: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

Output:
Sorted array in descending order: 12 8 5 3 1

এখানে compare() ফাংশনটি qsort() ফাংশনের জন্য কাস্টম কম্পারেটর হিসেবে কাজ করেছে এবং সংখ্যাগুলিকে বড় থেকে ছোটে সর্ট করা হয়েছে।

২. স্ট্রিং ভিত্তিক কাস্টম সর্টিং

ধরা যাক, আমাদের একটি স্ট্রিং এর অ্যারে আছে এবং আমরা স্ট্রিংগুলিকে তাদের দৈর্ঘ্য অনুযায়ী সর্ট করতে চাই (ছোট থেকে বড় বা বড় থেকে ছোট)। এখানে strlen() ফাংশন ব্যবহার করতে হবে।

উদাহরণ: স্ট্রিং দৈর্ঘ্য অনুযায়ী সর্টিং

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// কাস্টম কম্পারেটর ফাংশন
int compare(const void *a, const void *b) {
    return strlen((const char *)a) - strlen((const char *)b);  // String length comparison
}

int main() {
    char *arr[] = {"apple", "kiwi", "banana", "grape"};
    int n = sizeof(arr) / sizeof(arr[0]);

    // qsort ব্যবহার করে সর্ট করা
    qsort(arr, n, sizeof(char *), compare);

    printf("Sorted array based on string length: ");
    for (int i = 0; i < n; i++) {
        printf("%s ", arr[i]);
    }

    return 0;
}

Output:
Sorted array based on string length: kiwi grape apple banana

এখানে স্ট্রিংগুলির দৈর্ঘ্য অনুযায়ী তাদের সর্ট করা হয়েছে, ছোট স্ট্রিং প্রথমে আসছে।


কাস্টম সার্চিং টেকনিক্স

১. কাস্টম সার্চ ফাংশন

যখন আপনি একটি অ্যারেতে কাস্টম সার্চ করতে চান, তখন আপনি bsearch() ফাংশনের পরিবর্তে নিজের সার্চ ফাংশন তৈরি করতে পারেন। এটি সাধারণত তখনই দরকার হয় যখন সার্চিংয়ের শর্ত কাস্টম হয় (যেমন, কোন নির্দিষ্ট বৈশিষ্ট্য অনুযায়ী সার্চ করা)।

উদাহরণ: কাস্টম ইন্টিজার সার্চ

ধরা যাক, আমাদের একটি অ্যারে আছে এবং আমরা একটি নির্দিষ্ট শর্তের অধীনে একটি মান খুঁজতে চাই (যেমন, অ্যারের মধ্যে এমন একটি মান খুঁজতে যা ৩ দ্বারা বিভাজ্য।)

সিঙ্কট্যাক্স:

int custom_search(int arr[], int n, int target);

উদাহরণ কোড:

#include <stdio.h>

int custom_search(int arr[], int n, int target) {
    for (int i = 0; i < n; i++) {
        if (arr[i] % target == 0) {  // Check if divisible by target
            return i;  // Return index
        }
    }
    return -1;  // Return -1 if not found
}

int main() {
    int arr[] = {12, 15, 7, 20, 25};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 5;

    int index = custom_search(arr, n, target);
    if (index != -1) {
        printf("Element divisible by %d found at index %d\n", target, index);
    } else {
        printf("No element divisible by %d found\n", target);
    }

    return 0;
}

Output:
Element divisible by 5 found at index 0

এখানে custom_search() ফাংশনটি এমন একটি মান খুঁজে বের করেছে যা ৫ দ্বারা বিভাজ্য।


২. কাস্টম বাইনারি সার্চ

যদি অ্যারে সর্ট করা থাকে এবং আপনি নির্দিষ্ট শর্তে বাইনারি সার্চ করতে চান, তবে একটি কাস্টম বাইনারি সার্চ ফাংশন তৈরি করা যেতে পারে। এখানে bsearch() ফাংশনের ব্যবহার না করে বাইনারি সার্চ কাস্টম শর্তে করা হয়েছে।

উদাহরণ: কাস্টম বাইনারি সার্চ

ধরা যাক, আপনি এমন একটি অ্যারে খুঁজতে চান যেখানে যেকোনো পজিটিভ সংখ্যা ১০ এর থেকে বড় হতে হবে এবং সেই মানটি সঠিক স্থান থেকে বের করা হবে।

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);  // Ascending order comparison
}

int binary_search(int arr[], int size, int key) {
    int low = 0, high = size - 1;

    while (low <= high) {
        int mid = (low + high) / 2;

        if (arr[mid] == key) {
            return mid;
        } else if (arr[mid] < key) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }
    return -1;
}

int main() {
    int arr[] = {2, 5, 8, 10, 15};
    int size = sizeof(arr) / sizeof(arr[0]);

    qsort(arr, size, sizeof(int), compare);

    int key = 10;
    int index = binary_search(arr, size, key);

    if (index != -1) {
        printf("Element %d found at index %d\n", key, index);
    } else {
        printf("Element not found\n");
    }

    return 0;
}

Output:
Element 10 found at index 3

এখানে কাস্টম বাইনারি সার্চ ফাংশনটি সর্ট করা অ্যারেতে নির্দিষ্ট মান খুঁজে বের করেছে।


সারসংক্ষেপ

টেকনিকবর্ণনা
কাস্টম কম্পারেটর ফাংশনqsort() ব্যবহার করে কাস্টম শর্তে সর্ট করা (যেমন: বড় থেকে ছোট, স্ট্রিং দৈর্ঘ্য অনুযায়ী)
কাস্টম সার্চ ফাংশনঅ্যারে বা লিস্টে কাস্টম শর্ত অনুযায়ী সার্চ (যেমন: শর্ত পূরণকারী মান খোঁজা)
কাস্টম বাইনারি সার্চবাইনারি সার্চের মাধ্যমে সর্ট করা অ্যারেতে কাস্টম শর্তে দ্রুত অনুসন্ধান

সি প্রোগ্রামে কাস্টম সর্টিং এবং সার্চিং ফাংশনগুলো ডেটা ম্যানিপুলেশন এবং ফলস্বরূপ ফলাফল পেতে খুবই কার্যকরী। এই ফাংশনগুলোর মাধ্যমে আপনি আপনার নির্দিষ্ট প্রয়োজন অনুসারে ডেটা ম্যানেজমেন্ট সহজে করতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion